{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.10","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport platform\nfrom IPython.display import clear_output\nprint(platform.platform())\n\ndef resolve_dir(Dir):\n    if not os.path.exists(Dir):\n        os.mkdir(Dir)\n\ndef reset_path(Dir):\n    if not os.path.exists(Dir):\n        os.mkdir(Dir)\n    else:\n        os.system('rm -f {}/*'.format( Dir))","metadata":{"id":"YMm4qVv5qtGE","outputId":"46034115-6222-4708-e9ef-f7f407130943","execution":{"iopub.status.busy":"2021-06-28T21:12:08.175772Z","iopub.execute_input":"2021-06-28T21:12:08.176151Z","iopub.status.idle":"2021-06-28T21:12:08.188567Z","shell.execute_reply.started":"2021-06-28T21:12:08.176065Z","shell.execute_reply":"2021-06-28T21:12:08.187647Z"},"trusted":true},"execution_count":1,"outputs":[{"name":"stdout","text":"Linux-5.4.120+-x86_64-with-debian-buster-sid\n","output_type":"stream"}]},{"cell_type":"code","source":"import tensorflow as tf\ntf.random.set_seed(73)\nTPU_INIT = False\n\nif TPU_INIT:\n    try:\n        tpu = tf.distribute.cluster_resolver.TPUClusterResolver.connect()\n        tpu_strategy = tf.distribute.experimental.TPUStrategy(tpu)\n    \n    except ValueError:\n        raise BaseException('ERROR: Not connected to a TPU runtime!')\nelse:\n    !nvidia-smi\n;    \nprint(\"Tensorflow version \" + tf.__version__)","metadata":{"id":"m77ifGzHqtBg","outputId":"cccebfce-fcbf-4a7d-802b-4de91b6e4772","execution":{"iopub.status.busy":"2021-06-28T21:12:12.538912Z","iopub.execute_input":"2021-06-28T21:12:12.539247Z","iopub.status.idle":"2021-06-28T21:12:18.360385Z","shell.execute_reply.started":"2021-06-28T21:12:12.539218Z","shell.execute_reply":"2021-06-28T21:12:18.359448Z"},"trusted":true},"execution_count":2,"outputs":[{"name":"stdout","text":"Mon Jun 28 21:12:18 2021       \n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 450.119.04   Driver Version: 450.119.04   CUDA Version: 11.0     |\n|-------------------------------+----------------------+----------------------+\n| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |\n| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |\n|                               |                      |               MIG M. |\n|===============================+======================+======================|\n|   0  Tesla P100-PCIE...  Off  | 00000000:00:04.0 Off |                    0 |\n| N/A   40C    P0    27W / 250W |      0MiB / 16280MiB |      0%      Default |\n|                               |                      |                  N/A |\n+-------------------------------+----------------------+----------------------+\n                                                                               \n+-----------------------------------------------------------------------------+\n| Processes:                                                                  |\n|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |\n|        ID   ID                                                   Usage      |\n|=============================================================================|\n|  No running processes found                                                 |\n+-----------------------------------------------------------------------------+\nTensorflow version 2.4.1\n","output_type":"stream"}]},{"cell_type":"code","source":"MyDrive = '/kaggle/working'\n\nPROJECT_DIR = '../input/real-life-violence-situations-dataset'\n!ls {PROJECT_DIR}","metadata":{"id":"DwRUpYt5qs1l","outputId":"a177b0a6-1a7b-4e30-e75a-f96ba384cb62","execution":{"iopub.status.busy":"2021-06-28T21:12:26.392057Z","iopub.execute_input":"2021-06-28T21:12:26.392432Z","iopub.status.idle":"2021-06-28T21:12:27.147421Z","shell.execute_reply.started":"2021-06-28T21:12:26.392397Z","shell.execute_reply":"2021-06-28T21:12:27.146411Z"},"trusted":true},"execution_count":3,"outputs":[{"name":"stdout","text":"'Real Life Violence Dataset'  'real life violence situations'\n","output_type":"stream"}]},{"cell_type":"markdown","source":"## **Preprocessing**\n+ **Getting frames form video**\n+ **some image argumentations**","metadata":{}},{"cell_type":"code","source":"import cv2\nimport os\nimport imageio\nimport imgaug.augmenters as iaa\nimport imgaug as ia\n\nIMG_SIZE = 128\nColorChannels = 3\n\ndef video_to_frames(video):\n    vidcap = cv2.VideoCapture(video)\n    \n    import math\n    rate = math.floor(vidcap.get(3))\n    count = 0\n    \n    ImageFrames = []\n    while vidcap.isOpened():\n        ID = vidcap.get(1)\n        success, image = vidcap.read()\n        \n        if success:\n            # skipping frames to avoid duplications \n            if (ID % 7 == 0):\n                flip = iaa.Fliplr(1.0)\n                zoom = iaa.Affine(scale=1.3)\n                random_brightness = iaa.Multiply((1, 1.3))\n                rotate = iaa.Affine(rotate=(-25, 25))\n                \n                image_aug = flip(image = image)\n                image_aug = random_brightness(image = image_aug)\n                image_aug = zoom(image = image_aug)\n                image_aug = rotate(image = image_aug)\n                \n                rgb_img = cv2.cvtColor(image_aug, cv2.COLOR_BGR2RGB)\n                resized = cv2.resize(rgb_img, (IMG_SIZE, IMG_SIZE))\n                ImageFrames.append(resized)\n                \n            count += 1\n        else:\n            break\n    \n    vidcap.release()\n    \n    return ImageFrames","metadata":{"execution":{"iopub.status.busy":"2021-06-28T21:13:35.503640Z","iopub.execute_input":"2021-06-28T21:13:35.503988Z","iopub.status.idle":"2021-06-28T21:13:37.178990Z","shell.execute_reply.started":"2021-06-28T21:13:35.503957Z","shell.execute_reply":"2021-06-28T21:13:37.178190Z"},"trusted":true},"execution_count":6,"outputs":[]},{"cell_type":"code","source":"%%time\nfrom tqdm import tqdm\n\nVideoDataDir = PROJECT_DIR + '/Real Life Violence Dataset'\nprint('we have \\n{} Violence videos \\n{} NonViolence videos'.format(\n              len(os.listdir(VideoDataDir + '/Violence')), \n              len(os.listdir(VideoDataDir + '/NonViolence'))))\n\nX_original = []\ny_original = []\n\nprint('i choose 700 videos out of 2000, cuz of memory issue')\nCLASSES = [\"NonViolence\", \"Violence\"]\n#700 <- 350 + 350\n\nfor category in os.listdir(VideoDataDir):\n    path = os.path.join(VideoDataDir, category)\n    class_num = CLASSES.index(category)\n    for i, video in enumerate(tqdm(os.listdir(path)[0:350])):\n        frames = video_to_frames(path + '/' + video)\n        for j, frame in enumerate(frames):\n            X_original.append(frame)\n            y_original.append(class_num)","metadata":{"execution":{"iopub.status.busy":"2021-06-28T21:13:41.413870Z","iopub.execute_input":"2021-06-28T21:13:41.414231Z","iopub.status.idle":"2021-06-28T21:17:29.584414Z","shell.execute_reply.started":"2021-06-28T21:13:41.414198Z","shell.execute_reply":"2021-06-28T21:17:29.581822Z"},"trusted":true},"execution_count":7,"outputs":[{"name":"stderr","text":"  0%|          | 1/350 [00:00<01:07,  5.19it/s]","output_type":"stream"},{"name":"stdout","text":"we have \n1000 Violence videos \n1000 NonViolence videos\ni choose 700 videos out of 2000, cuz of memory issue\n","output_type":"stream"},{"name":"stderr","text":"100%|██████████| 350/350 [01:17<00:00,  4.52it/s]\n100%|██████████| 350/350 [02:29<00:00,  2.33it/s]","output_type":"stream"},{"name":"stdout","text":"CPU times: user 5min 53s, sys: 14.7 s, total: 6min 8s\nWall time: 3min 48s\n","output_type":"stream"},{"name":"stderr","text":"\n","output_type":"stream"}]},{"cell_type":"code","source":"import numpy as np\nX_original = np.array(X_original).reshape(-1 , IMG_SIZE * IMG_SIZE * 3)\ny_original = np.array(y_original)\nlen(X_original)","metadata":{"execution":{"iopub.status.busy":"2021-06-28T21:18:34.637958Z","iopub.execute_input":"2021-06-28T21:18:34.638320Z","iopub.status.idle":"2021-06-28T21:18:34.864211Z","shell.execute_reply.started":"2021-06-28T21:18:34.638286Z","shell.execute_reply":"2021-06-28T21:18:34.863222Z"},"trusted":true},"execution_count":8,"outputs":[{"execution_count":8,"output_type":"execute_result","data":{"text/plain":"13583"},"metadata":{}}]},{"cell_type":"code","source":"from sklearn.model_selection import StratifiedShuffleSplit\n\nstratified_sample = StratifiedShuffleSplit(n_splits=2, test_size=0.3, random_state=73)\n\nfor train_index, test_index in stratified_sample.split(X_original, y_original):\n    X_train, X_test = X_original[train_index], X_original[test_index]\n    y_train, y_test = y_original[train_index], y_original[test_index]\n\nX_train_nn = X_train.reshape(-1, IMG_SIZE, IMG_SIZE, 3) / 255\nX_test_nn = X_test.reshape(-1, IMG_SIZE, IMG_SIZE, 3) / 255","metadata":{"execution":{"iopub.status.busy":"2021-06-28T21:18:40.129780Z","iopub.execute_input":"2021-06-28T21:18:40.130114Z","iopub.status.idle":"2021-06-28T21:18:42.322266Z","shell.execute_reply.started":"2021-06-28T21:18:40.130083Z","shell.execute_reply":"2021-06-28T21:18:42.321377Z"},"trusted":true},"execution_count":9,"outputs":[]},{"cell_type":"markdown","source":"## **Model Training**","metadata":{"id":"fvmfQMM0p46i"}},{"cell_type":"code","source":"!pip install imutils\nclear_output()","metadata":{"execution":{"iopub.status.busy":"2021-06-28T21:18:46.747115Z","iopub.execute_input":"2021-06-28T21:18:46.747492Z","iopub.status.idle":"2021-06-28T21:18:56.074221Z","shell.execute_reply.started":"2021-06-28T21:18:46.747463Z","shell.execute_reply":"2021-06-28T21:18:56.073342Z"},"trusted":true},"execution_count":10,"outputs":[]},{"cell_type":"code","source":"import cv2\nimport os\nimport numpy as np\nimport pickle\nimport matplotlib\nmatplotlib.use(\"Agg\")\n\nfrom keras.layers import Input\nfrom keras.models import Model\nfrom keras.layers.core import Dropout,Flatten,Dense\n\nimport matplotlib.pyplot as plt","metadata":{"id":"f5SLkPZ2I01J","execution":{"iopub.status.busy":"2021-06-28T21:19:00.023698Z","iopub.execute_input":"2021-06-28T21:19:00.024214Z","iopub.status.idle":"2021-06-28T21:19:00.097339Z","shell.execute_reply.started":"2021-06-28T21:19:00.024167Z","shell.execute_reply":"2021-06-28T21:19:00.096328Z"},"trusted":true},"execution_count":11,"outputs":[]},{"cell_type":"code","source":"epochs = 150\n\nfrom keras import regularizers\nkernel_regularizer = regularizers.l2(0.0001)\n\nfrom keras.applications import MobileNetV2\n\ndef load_layers():\n    input_tensor = Input(shape=(IMG_SIZE, IMG_SIZE, ColorChannels))\n    baseModel = MobileNetV2(pooling='avg',\n                            include_top=False, \n                            input_tensor=input_tensor)\n    \n    headModel = baseModel.output   \n    headModel = Dense(1, activation=\"sigmoid\")(headModel)\n    model = Model(inputs=baseModel.input, outputs=headModel)\n\n    for layer in baseModel.layers:\n        layer.trainable = False\n\n    print(\"Compiling model...\")\n    model.compile(loss=\"binary_crossentropy\",\n                    optimizer='adam',\n                    metrics=[\"accuracy\"])\n\n    return model\n\nif TPU_INIT:\n    with tpu_strategy.scope():\n        model = load_layers()\nelse:\n    model = load_layers()\n\nmodel.summary()","metadata":{"id":"dNsCZbY3p8VM","outputId":"431b8715-b9d1-4bb0-eb7e-5758027c14ac","_kg_hide-output":true,"execution":{"iopub.status.busy":"2021-06-28T21:19:03.584867Z","iopub.execute_input":"2021-06-28T21:19:03.585235Z","iopub.status.idle":"2021-06-28T21:19:06.799324Z","shell.execute_reply.started":"2021-06-28T21:19:03.585199Z","shell.execute_reply":"2021-06-28T21:19:06.798517Z"},"trusted":true},"execution_count":12,"outputs":[{"name":"stdout","text":"Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_224_no_top.h5\n9412608/9406464 [==============================] - 0s 0us/step\nCompiling model...\nModel: \"model\"\n__________________________________________________________________________________________________\nLayer (type)                    Output Shape         Param #     Connected to                     \n==================================================================================================\ninput_1 (InputLayer)            [(None, 128, 128, 3) 0                                            \n__________________________________________________________________________________________________\nConv1 (Conv2D)                  (None, 64, 64, 32)   864         input_1[0][0]                    \n__________________________________________________________________________________________________\nbn_Conv1 (BatchNormalization)   (None, 64, 64, 32)   128         Conv1[0][0]                      \n__________________________________________________________________________________________________\nConv1_relu (ReLU)               (None, 64, 64, 32)   0           bn_Conv1[0][0]                   \n__________________________________________________________________________________________________\nexpanded_conv_depthwise (Depthw (None, 64, 64, 32)   288         Conv1_relu[0][0]                 \n__________________________________________________________________________________________________\nexpanded_conv_depthwise_BN (Bat (None, 64, 64, 32)   128         expanded_conv_depthwise[0][0]    \n__________________________________________________________________________________________________\nexpanded_conv_depthwise_relu (R (None, 64, 64, 32)   0           expanded_conv_depthwise_BN[0][0] \n__________________________________________________________________________________________________\nexpanded_conv_project (Conv2D)  (None, 64, 64, 16)   512         expanded_conv_depthwise_relu[0][0\n__________________________________________________________________________________________________\nexpanded_conv_project_BN (Batch (None, 64, 64, 16)   64          expanded_conv_project[0][0]      \n__________________________________________________________________________________________________\nblock_1_expand (Conv2D)         (None, 64, 64, 96)   1536        expanded_conv_project_BN[0][0]   \n__________________________________________________________________________________________________\nblock_1_expand_BN (BatchNormali (None, 64, 64, 96)   384         block_1_expand[0][0]             \n__________________________________________________________________________________________________\nblock_1_expand_relu (ReLU)      (None, 64, 64, 96)   0           block_1_expand_BN[0][0]          \n__________________________________________________________________________________________________\nblock_1_pad (ZeroPadding2D)     (None, 65, 65, 96)   0           block_1_expand_relu[0][0]        \n__________________________________________________________________________________________________\nblock_1_depthwise (DepthwiseCon (None, 32, 32, 96)   864         block_1_pad[0][0]                \n__________________________________________________________________________________________________\nblock_1_depthwise_BN (BatchNorm (None, 32, 32, 96)   384         block_1_depthwise[0][0]          \n__________________________________________________________________________________________________\nblock_1_depthwise_relu (ReLU)   (None, 32, 32, 96)   0           block_1_depthwise_BN[0][0]       \n__________________________________________________________________________________________________\nblock_1_project (Conv2D)        (None, 32, 32, 24)   2304        block_1_depthwise_relu[0][0]     \n__________________________________________________________________________________________________\nblock_1_project_BN (BatchNormal (None, 32, 32, 24)   96          block_1_project[0][0]            \n__________________________________________________________________________________________________\nblock_2_expand (Conv2D)         (None, 32, 32, 144)  3456        block_1_project_BN[0][0]         \n__________________________________________________________________________________________________\nblock_2_expand_BN (BatchNormali (None, 32, 32, 144)  576         block_2_expand[0][0]             \n__________________________________________________________________________________________________\nblock_2_expand_relu (ReLU)      (None, 32, 32, 144)  0           block_2_expand_BN[0][0]          \n__________________________________________________________________________________________________\nblock_2_depthwise (DepthwiseCon (None, 32, 32, 144)  1296        block_2_expand_relu[0][0]        \n__________________________________________________________________________________________________\nblock_2_depthwise_BN (BatchNorm (None, 32, 32, 144)  576         block_2_depthwise[0][0]          \n__________________________________________________________________________________________________\nblock_2_depthwise_relu (ReLU)   (None, 32, 32, 144)  0           block_2_depthwise_BN[0][0]       \n__________________________________________________________________________________________________\nblock_2_project (Conv2D)        (None, 32, 32, 24)   3456        block_2_depthwise_relu[0][0]     \n__________________________________________________________________________________________________\nblock_2_project_BN (BatchNormal (None, 32, 32, 24)   96          block_2_project[0][0]            \n__________________________________________________________________________________________________\nblock_2_add (Add)               (None, 32, 32, 24)   0           block_1_project_BN[0][0]         \n                                                                 block_2_project_BN[0][0]         \n__________________________________________________________________________________________________\nblock_3_expand (Conv2D)         (None, 32, 32, 144)  3456        block_2_add[0][0]                \n__________________________________________________________________________________________________\nblock_3_expand_BN (BatchNormali (None, 32, 32, 144)  576         block_3_expand[0][0]             \n__________________________________________________________________________________________________\nblock_3_expand_relu (ReLU)      (None, 32, 32, 144)  0           block_3_expand_BN[0][0]          \n__________________________________________________________________________________________________\nblock_3_pad (ZeroPadding2D)     (None, 33, 33, 144)  0           block_3_expand_relu[0][0]        \n__________________________________________________________________________________________________\nblock_3_depthwise (DepthwiseCon (None, 16, 16, 144)  1296        block_3_pad[0][0]                \n__________________________________________________________________________________________________\nblock_3_depthwise_BN (BatchNorm (None, 16, 16, 144)  576         block_3_depthwise[0][0]          \n__________________________________________________________________________________________________\nblock_3_depthwise_relu (ReLU)   (None, 16, 16, 144)  0           block_3_depthwise_BN[0][0]       \n__________________________________________________________________________________________________\nblock_3_project (Conv2D)        (None, 16, 16, 32)   4608        block_3_depthwise_relu[0][0]     \n__________________________________________________________________________________________________\nblock_3_project_BN (BatchNormal (None, 16, 16, 32)   128         block_3_project[0][0]            \n__________________________________________________________________________________________________\nblock_4_expand (Conv2D)         (None, 16, 16, 192)  6144        block_3_project_BN[0][0]         \n__________________________________________________________________________________________________\nblock_4_expand_BN (BatchNormali (None, 16, 16, 192)  768         block_4_expand[0][0]             \n__________________________________________________________________________________________________\nblock_4_expand_relu (ReLU)      (None, 16, 16, 192)  0           block_4_expand_BN[0][0]          \n__________________________________________________________________________________________________\nblock_4_depthwise (DepthwiseCon (None, 16, 16, 192)  1728        block_4_expand_relu[0][0]        \n__________________________________________________________________________________________________\nblock_4_depthwise_BN (BatchNorm (None, 16, 16, 192)  768         block_4_depthwise[0][0]          \n__________________________________________________________________________________________________\nblock_4_depthwise_relu (ReLU)   (None, 16, 16, 192)  0           block_4_depthwise_BN[0][0]       \n__________________________________________________________________________________________________\nblock_4_project (Conv2D)        (None, 16, 16, 32)   6144        block_4_depthwise_relu[0][0]     \n__________________________________________________________________________________________________\nblock_4_project_BN (BatchNormal (None, 16, 16, 32)   128         block_4_project[0][0]            \n__________________________________________________________________________________________________\nblock_4_add (Add)               (None, 16, 16, 32)   0           block_3_project_BN[0][0]         \n                                                                 block_4_project_BN[0][0]         \n__________________________________________________________________________________________________\nblock_5_expand (Conv2D)         (None, 16, 16, 192)  6144        block_4_add[0][0]                \n__________________________________________________________________________________________________\nblock_5_expand_BN (BatchNormali (None, 16, 16, 192)  768         block_5_expand[0][0]             \n__________________________________________________________________________________________________\nblock_5_expand_relu (ReLU)      (None, 16, 16, 192)  0           block_5_expand_BN[0][0]          \n__________________________________________________________________________________________________\nblock_5_depthwise (DepthwiseCon (None, 16, 16, 192)  1728        block_5_expand_relu[0][0]        \n__________________________________________________________________________________________________\nblock_5_depthwise_BN (BatchNorm (None, 16, 16, 192)  768         block_5_depthwise[0][0]          \n__________________________________________________________________________________________________\nblock_5_depthwise_relu (ReLU)   (None, 16, 16, 192)  0           block_5_depthwise_BN[0][0]       \n__________________________________________________________________________________________________\nblock_5_project (Conv2D)        (None, 16, 16, 32)   6144        block_5_depthwise_relu[0][0]     \n__________________________________________________________________________________________________\nblock_5_project_BN (BatchNormal (None, 16, 16, 32)   128         block_5_project[0][0]            \n__________________________________________________________________________________________________\nblock_5_add (Add)               (None, 16, 16, 32)   0           block_4_add[0][0]                \n                                                                 block_5_project_BN[0][0]         \n__________________________________________________________________________________________________\nblock_6_expand (Conv2D)         (None, 16, 16, 192)  6144        block_5_add[0][0]                \n__________________________________________________________________________________________________\nblock_6_expand_BN (BatchNormali (None, 16, 16, 192)  768         block_6_expand[0][0]             \n__________________________________________________________________________________________________\nblock_6_expand_relu (ReLU)      (None, 16, 16, 192)  0           block_6_expand_BN[0][0]          \n__________________________________________________________________________________________________\nblock_6_pad (ZeroPadding2D)     (None, 17, 17, 192)  0           block_6_expand_relu[0][0]        \n__________________________________________________________________________________________________\nblock_6_depthwise (DepthwiseCon (None, 8, 8, 192)    1728        block_6_pad[0][0]                \n__________________________________________________________________________________________________\nblock_6_depthwise_BN (BatchNorm (None, 8, 8, 192)    768         block_6_depthwise[0][0]          \n__________________________________________________________________________________________________\nblock_6_depthwise_relu (ReLU)   (None, 8, 8, 192)    0           block_6_depthwise_BN[0][0]       \n__________________________________________________________________________________________________\nblock_6_project (Conv2D)        (None, 8, 8, 64)     12288       block_6_depthwise_relu[0][0]     \n__________________________________________________________________________________________________\nblock_6_project_BN (BatchNormal (None, 8, 8, 64)     256         block_6_project[0][0]            \n__________________________________________________________________________________________________\nblock_7_expand (Conv2D)         (None, 8, 8, 384)    24576       block_6_project_BN[0][0]         \n__________________________________________________________________________________________________\nblock_7_expand_BN (BatchNormali (None, 8, 8, 384)    1536        block_7_expand[0][0]             \n__________________________________________________________________________________________________\nblock_7_expand_relu (ReLU)      (None, 8, 8, 384)    0           block_7_expand_BN[0][0]          \n__________________________________________________________________________________________________\nblock_7_depthwise (DepthwiseCon (None, 8, 8, 384)    3456        block_7_expand_relu[0][0]        \n__________________________________________________________________________________________________\nblock_7_depthwise_BN (BatchNorm (None, 8, 8, 384)    1536        block_7_depthwise[0][0]          \n__________________________________________________________________________________________________\nblock_7_depthwise_relu (ReLU)   (None, 8, 8, 384)    0           block_7_depthwise_BN[0][0]       \n__________________________________________________________________________________________________\nblock_7_project (Conv2D)        (None, 8, 8, 64)     24576       block_7_depthwise_relu[0][0]     \n__________________________________________________________________________________________________\nblock_7_project_BN (BatchNormal (None, 8, 8, 64)     256         block_7_project[0][0]            \n__________________________________________________________________________________________________\nblock_7_add (Add)               (None, 8, 8, 64)     0           block_6_project_BN[0][0]         \n                                                                 block_7_project_BN[0][0]         \n__________________________________________________________________________________________________\nblock_8_expand (Conv2D)         (None, 8, 8, 384)    24576       block_7_add[0][0]                \n__________________________________________________________________________________________________\nblock_8_expand_BN (BatchNormali (None, 8, 8, 384)    1536        block_8_expand[0][0]             \n__________________________________________________________________________________________________\nblock_8_expand_relu (ReLU)      (None, 8, 8, 384)    0           block_8_expand_BN[0][0]          \n__________________________________________________________________________________________________\nblock_8_depthwise (DepthwiseCon (None, 8, 8, 384)    3456        block_8_expand_relu[0][0]        \n__________________________________________________________________________________________________\nblock_8_depthwise_BN (BatchNorm (None, 8, 8, 384)    1536        block_8_depthwise[0][0]          \n__________________________________________________________________________________________________\nblock_8_depthwise_relu (ReLU)   (None, 8, 8, 384)    0           block_8_depthwise_BN[0][0]       \n__________________________________________________________________________________________________\nblock_8_project (Conv2D)        (None, 8, 8, 64)     24576       block_8_depthwise_relu[0][0]     \n__________________________________________________________________________________________________\nblock_8_project_BN (BatchNormal (None, 8, 8, 64)     256         block_8_project[0][0]            \n__________________________________________________________________________________________________\nblock_8_add (Add)               (None, 8, 8, 64)     0           block_7_add[0][0]                \n                                                                 block_8_project_BN[0][0]         \n__________________________________________________________________________________________________\nblock_9_expand (Conv2D)         (None, 8, 8, 384)    24576       block_8_add[0][0]                \n__________________________________________________________________________________________________\nblock_9_expand_BN (BatchNormali (None, 8, 8, 384)    1536        block_9_expand[0][0]             \n__________________________________________________________________________________________________\nblock_9_expand_relu (ReLU)      (None, 8, 8, 384)    0           block_9_expand_BN[0][0]          \n__________________________________________________________________________________________________\nblock_9_depthwise (DepthwiseCon (None, 8, 8, 384)    3456        block_9_expand_relu[0][0]        \n__________________________________________________________________________________________________\nblock_9_depthwise_BN (BatchNorm (None, 8, 8, 384)    1536        block_9_depthwise[0][0]          \n__________________________________________________________________________________________________\nblock_9_depthwise_relu (ReLU)   (None, 8, 8, 384)    0           block_9_depthwise_BN[0][0]       \n__________________________________________________________________________________________________\nblock_9_project (Conv2D)        (None, 8, 8, 64)     24576       block_9_depthwise_relu[0][0]     \n__________________________________________________________________________________________________\nblock_9_project_BN (BatchNormal (None, 8, 8, 64)     256         block_9_project[0][0]            \n__________________________________________________________________________________________________\nblock_9_add (Add)               (None, 8, 8, 64)     0           block_8_add[0][0]                \n                                                                 block_9_project_BN[0][0]         \n__________________________________________________________________________________________________\nblock_10_expand (Conv2D)        (None, 8, 8, 384)    24576       block_9_add[0][0]                \n__________________________________________________________________________________________________\nblock_10_expand_BN (BatchNormal (None, 8, 8, 384)    1536        block_10_expand[0][0]            \n__________________________________________________________________________________________________\nblock_10_expand_relu (ReLU)     (None, 8, 8, 384)    0           block_10_expand_BN[0][0]         \n__________________________________________________________________________________________________\nblock_10_depthwise (DepthwiseCo (None, 8, 8, 384)    3456        block_10_expand_relu[0][0]       \n__________________________________________________________________________________________________\nblock_10_depthwise_BN (BatchNor (None, 8, 8, 384)    1536        block_10_depthwise[0][0]         \n__________________________________________________________________________________________________\nblock_10_depthwise_relu (ReLU)  (None, 8, 8, 384)    0           block_10_depthwise_BN[0][0]      \n__________________________________________________________________________________________________\nblock_10_project (Conv2D)       (None, 8, 8, 96)     36864       block_10_depthwise_relu[0][0]    \n__________________________________________________________________________________________________\nblock_10_project_BN (BatchNorma (None, 8, 8, 96)     384         block_10_project[0][0]           \n__________________________________________________________________________________________________\nblock_11_expand (Conv2D)        (None, 8, 8, 576)    55296       block_10_project_BN[0][0]        \n__________________________________________________________________________________________________\nblock_11_expand_BN (BatchNormal (None, 8, 8, 576)    2304        block_11_expand[0][0]            \n__________________________________________________________________________________________________\nblock_11_expand_relu (ReLU)     (None, 8, 8, 576)    0           block_11_expand_BN[0][0]         \n__________________________________________________________________________________________________\nblock_11_depthwise (DepthwiseCo (None, 8, 8, 576)    5184        block_11_expand_relu[0][0]       \n__________________________________________________________________________________________________\nblock_11_depthwise_BN (BatchNor (None, 8, 8, 576)    2304        block_11_depthwise[0][0]         \n__________________________________________________________________________________________________\nblock_11_depthwise_relu (ReLU)  (None, 8, 8, 576)    0           block_11_depthwise_BN[0][0]      \n__________________________________________________________________________________________________\nblock_11_project (Conv2D)       (None, 8, 8, 96)     55296       block_11_depthwise_relu[0][0]    \n__________________________________________________________________________________________________\nblock_11_project_BN (BatchNorma (None, 8, 8, 96)     384         block_11_project[0][0]           \n__________________________________________________________________________________________________\nblock_11_add (Add)              (None, 8, 8, 96)     0           block_10_project_BN[0][0]        \n                                                                 block_11_project_BN[0][0]        \n__________________________________________________________________________________________________\nblock_12_expand (Conv2D)        (None, 8, 8, 576)    55296       block_11_add[0][0]               \n__________________________________________________________________________________________________\nblock_12_expand_BN (BatchNormal (None, 8, 8, 576)    2304        block_12_expand[0][0]            \n__________________________________________________________________________________________________\nblock_12_expand_relu (ReLU)     (None, 8, 8, 576)    0           block_12_expand_BN[0][0]         \n__________________________________________________________________________________________________\nblock_12_depthwise (DepthwiseCo (None, 8, 8, 576)    5184        block_12_expand_relu[0][0]       \n__________________________________________________________________________________________________\nblock_12_depthwise_BN (BatchNor (None, 8, 8, 576)    2304        block_12_depthwise[0][0]         \n__________________________________________________________________________________________________\nblock_12_depthwise_relu (ReLU)  (None, 8, 8, 576)    0           block_12_depthwise_BN[0][0]      \n__________________________________________________________________________________________________\nblock_12_project (Conv2D)       (None, 8, 8, 96)     55296       block_12_depthwise_relu[0][0]    \n__________________________________________________________________________________________________\nblock_12_project_BN (BatchNorma (None, 8, 8, 96)     384         block_12_project[0][0]           \n__________________________________________________________________________________________________\nblock_12_add (Add)              (None, 8, 8, 96)     0           block_11_add[0][0]               \n                                                                 block_12_project_BN[0][0]        \n__________________________________________________________________________________________________\nblock_13_expand (Conv2D)        (None, 8, 8, 576)    55296       block_12_add[0][0]               \n__________________________________________________________________________________________________\nblock_13_expand_BN (BatchNormal (None, 8, 8, 576)    2304        block_13_expand[0][0]            \n__________________________________________________________________________________________________\nblock_13_expand_relu (ReLU)     (None, 8, 8, 576)    0           block_13_expand_BN[0][0]         \n__________________________________________________________________________________________________\nblock_13_pad (ZeroPadding2D)    (None, 9, 9, 576)    0           block_13_expand_relu[0][0]       \n__________________________________________________________________________________________________\nblock_13_depthwise (DepthwiseCo (None, 4, 4, 576)    5184        block_13_pad[0][0]               \n__________________________________________________________________________________________________\nblock_13_depthwise_BN (BatchNor (None, 4, 4, 576)    2304        block_13_depthwise[0][0]         \n__________________________________________________________________________________________________\nblock_13_depthwise_relu (ReLU)  (None, 4, 4, 576)    0           block_13_depthwise_BN[0][0]      \n__________________________________________________________________________________________________\nblock_13_project (Conv2D)       (None, 4, 4, 160)    92160       block_13_depthwise_relu[0][0]    \n__________________________________________________________________________________________________\nblock_13_project_BN (BatchNorma (None, 4, 4, 160)    640         block_13_project[0][0]           \n__________________________________________________________________________________________________\nblock_14_expand (Conv2D)        (None, 4, 4, 960)    153600      block_13_project_BN[0][0]        \n__________________________________________________________________________________________________\nblock_14_expand_BN (BatchNormal (None, 4, 4, 960)    3840        block_14_expand[0][0]            \n__________________________________________________________________________________________________\nblock_14_expand_relu (ReLU)     (None, 4, 4, 960)    0           block_14_expand_BN[0][0]         \n__________________________________________________________________________________________________\nblock_14_depthwise (DepthwiseCo (None, 4, 4, 960)    8640        block_14_expand_relu[0][0]       \n__________________________________________________________________________________________________\nblock_14_depthwise_BN (BatchNor (None, 4, 4, 960)    3840        block_14_depthwise[0][0]         \n__________________________________________________________________________________________________\nblock_14_depthwise_relu (ReLU)  (None, 4, 4, 960)    0           block_14_depthwise_BN[0][0]      \n__________________________________________________________________________________________________\nblock_14_project (Conv2D)       (None, 4, 4, 160)    153600      block_14_depthwise_relu[0][0]    \n__________________________________________________________________________________________________\nblock_14_project_BN (BatchNorma (None, 4, 4, 160)    640         block_14_project[0][0]           \n__________________________________________________________________________________________________\nblock_14_add (Add)              (None, 4, 4, 160)    0           block_13_project_BN[0][0]        \n                                                                 block_14_project_BN[0][0]        \n__________________________________________________________________________________________________\nblock_15_expand (Conv2D)        (None, 4, 4, 960)    153600      block_14_add[0][0]               \n__________________________________________________________________________________________________\nblock_15_expand_BN (BatchNormal (None, 4, 4, 960)    3840        block_15_expand[0][0]            \n__________________________________________________________________________________________________\nblock_15_expand_relu (ReLU)     (None, 4, 4, 960)    0           block_15_expand_BN[0][0]         \n__________________________________________________________________________________________________\nblock_15_depthwise (DepthwiseCo (None, 4, 4, 960)    8640        block_15_expand_relu[0][0]       \n__________________________________________________________________________________________________\nblock_15_depthwise_BN (BatchNor (None, 4, 4, 960)    3840        block_15_depthwise[0][0]         \n__________________________________________________________________________________________________\nblock_15_depthwise_relu (ReLU)  (None, 4, 4, 960)    0           block_15_depthwise_BN[0][0]      \n__________________________________________________________________________________________________\nblock_15_project (Conv2D)       (None, 4, 4, 160)    153600      block_15_depthwise_relu[0][0]    \n__________________________________________________________________________________________________\nblock_15_project_BN (BatchNorma (None, 4, 4, 160)    640         block_15_project[0][0]           \n__________________________________________________________________________________________________\nblock_15_add (Add)              (None, 4, 4, 160)    0           block_14_add[0][0]               \n                                                                 block_15_project_BN[0][0]        \n__________________________________________________________________________________________________\nblock_16_expand (Conv2D)        (None, 4, 4, 960)    153600      block_15_add[0][0]               \n__________________________________________________________________________________________________\nblock_16_expand_BN (BatchNormal (None, 4, 4, 960)    3840        block_16_expand[0][0]            \n__________________________________________________________________________________________________\nblock_16_expand_relu (ReLU)     (None, 4, 4, 960)    0           block_16_expand_BN[0][0]         \n__________________________________________________________________________________________________\nblock_16_depthwise (DepthwiseCo (None, 4, 4, 960)    8640        block_16_expand_relu[0][0]       \n__________________________________________________________________________________________________\nblock_16_depthwise_BN (BatchNor (None, 4, 4, 960)    3840        block_16_depthwise[0][0]         \n__________________________________________________________________________________________________\nblock_16_depthwise_relu (ReLU)  (None, 4, 4, 960)    0           block_16_depthwise_BN[0][0]      \n__________________________________________________________________________________________________\nblock_16_project (Conv2D)       (None, 4, 4, 320)    307200      block_16_depthwise_relu[0][0]    \n__________________________________________________________________________________________________\nblock_16_project_BN (BatchNorma (None, 4, 4, 320)    1280        block_16_project[0][0]           \n__________________________________________________________________________________________________\nConv_1 (Conv2D)                 (None, 4, 4, 1280)   409600      block_16_project_BN[0][0]        \n__________________________________________________________________________________________________\nConv_1_bn (BatchNormalization)  (None, 4, 4, 1280)   5120        Conv_1[0][0]                     \n__________________________________________________________________________________________________\nout_relu (ReLU)                 (None, 4, 4, 1280)   0           Conv_1_bn[0][0]                  \n__________________________________________________________________________________________________\nglobal_average_pooling2d (Globa (None, 1280)         0           out_relu[0][0]                   \n__________________________________________________________________________________________________\ndense (Dense)                   (None, 1)            1281        global_average_pooling2d[0][0]   \n==================================================================================================\nTotal params: 2,259,265\nTrainable params: 1,281\nNon-trainable params: 2,257,984\n__________________________________________________________________________________________________\n","output_type":"stream"}]},{"cell_type":"code","source":"from tensorflow.keras.callbacks import Callback, ModelCheckpoint, LearningRateScheduler, TensorBoard, EarlyStopping, ReduceLROnPlateau\n\npatience = 3\n\nstart_lr = 0.00001\nmin_lr = 0.00001\nmax_lr = 0.00005\n\nbatch_size = 4\n\nif TPU_INIT:\n    max_lr = max_lr * tpu_strategy.num_replicas_in_sync\n    batch_size = batch_size * tpu_strategy.num_replicas_in_sync\n\nrampup_epochs = 5\nsustain_epochs = 0\nexp_decay = .8\n\ndef lrfn(epoch):\n    if epoch < rampup_epochs:\n        return (max_lr - start_lr)/rampup_epochs * epoch + start_lr\n    elif epoch < rampup_epochs + sustain_epochs:\n        return max_lr\n    else:\n        return (max_lr - min_lr) * exp_decay**(epoch-rampup_epochs-sustain_epochs) + min_lr\n\n\nclass myCallback(Callback):\n    def on_epoch_end(self, epoch, logs={}):\n        if ((logs.get('accuracy')>=0.999)):\n            print(\"\\nLimits Reached cancelling training!\")\n            self.model.stop_training = True","metadata":{"id":"Ot4-s-9rLwF4","execution":{"iopub.status.busy":"2021-06-28T21:19:22.162673Z","iopub.execute_input":"2021-06-28T21:19:22.163129Z","iopub.status.idle":"2021-06-28T21:19:22.176337Z","shell.execute_reply.started":"2021-06-28T21:19:22.163083Z","shell.execute_reply":"2021-06-28T21:19:22.175519Z"},"trusted":true},"execution_count":13,"outputs":[]},{"cell_type":"code","source":"end_callback = myCallback()\n\nlr_callback = LearningRateScheduler(lambda epoch: lrfn(epoch), verbose=False)\n\nearly_stopping = EarlyStopping(patience = patience, monitor='val_loss',\n                                 mode='min', restore_best_weights=True, \n                                 verbose = 1, min_delta = .00075)\n\nPROJECT_DIR = MyDrive + '/RiskDetection'\n\nlr_plat = ReduceLROnPlateau(patience = 2, mode = 'min')\n\nos.system('rm -rf ./logs/')\n\nimport datetime\nlog_dir=\"logs/fit/\" + datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\")\ntensorboard_callback = TensorBoard(log_dir = log_dir, write_graph=True, histogram_freq=1)\n\ncheckpoint_filepath = 'ModelWeights.h5'\n\nmodel_checkpoints = ModelCheckpoint(filepath=checkpoint_filepath,\n                                        save_weights_only=True,\n                                        monitor='val_loss',\n                                        mode='min',\n                                        verbose = 1,\n                                        save_best_only=True)\n\n\ncallbacks = [end_callback, lr_callback, model_checkpoints, tensorboard_callback, early_stopping, lr_plat]\n\nif TPU_INIT:\n    callbacks = [end_callback, lr_callback, model_checkpoints, early_stopping, lr_plat]","metadata":{"execution":{"iopub.status.busy":"2021-06-28T21:19:28.031227Z","iopub.execute_input":"2021-06-28T21:19:28.031571Z","iopub.status.idle":"2021-06-28T21:19:28.388810Z","shell.execute_reply.started":"2021-06-28T21:19:28.031539Z","shell.execute_reply":"2021-06-28T21:19:28.387749Z"},"trusted":true},"execution_count":14,"outputs":[]},{"cell_type":"code","source":"print('Training head...')\n#model.load_weights('./Model_Weights.h5')\n\nhistory = model.fit(X_train_nn ,y_train, epochs=epochs,\n                        callbacks=callbacks,\n                        validation_data = (X_test_nn, y_test),\n                        batch_size=batch_size)\n\nprint('\\nRestoring best Weights for MobileNetV2')\nmodel.load_weights(checkpoint_filepath)","metadata":{"id":"MDFpuPolFYRc","outputId":"ea444b27-b899-46b5-cc59-fe9ba7de6c9a","_kg_hide-output":false,"execution":{"iopub.status.busy":"2021-06-28T21:19:34.187954Z","iopub.execute_input":"2021-06-28T21:19:34.188325Z","iopub.status.idle":"2021-06-28T21:40:04.073914Z","shell.execute_reply.started":"2021-06-28T21:19:34.188280Z","shell.execute_reply":"2021-06-28T21:40:04.073018Z"},"trusted":true},"execution_count":15,"outputs":[{"name":"stdout","text":"Training head...\nEpoch 1/150\n2377/2377 [==============================] - 28s 10ms/step - loss: 0.8119 - accuracy: 0.5507 - val_loss: 0.6402 - val_accuracy: 0.6466\n\nEpoch 00001: val_loss improved from inf to 0.64018, saving model to ModelWeights.h5\nEpoch 2/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.6116 - accuracy: 0.6719 - val_loss: 0.5003 - val_accuracy: 0.7504\n\nEpoch 00002: val_loss improved from 0.64018 to 0.50028, saving model to ModelWeights.h5\nEpoch 3/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.4879 - accuracy: 0.7587 - val_loss: 0.4211 - val_accuracy: 0.8091\n\nEpoch 00003: val_loss improved from 0.50028 to 0.42114, saving model to ModelWeights.h5\nEpoch 4/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.4039 - accuracy: 0.8131 - val_loss: 0.3778 - val_accuracy: 0.8312\n\nEpoch 00004: val_loss improved from 0.42114 to 0.37776, saving model to ModelWeights.h5\nEpoch 5/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.3658 - accuracy: 0.8322 - val_loss: 0.3500 - val_accuracy: 0.8520\n\nEpoch 00005: val_loss improved from 0.37776 to 0.35003, saving model to ModelWeights.h5\nEpoch 6/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.3401 - accuracy: 0.8518 - val_loss: 0.3323 - val_accuracy: 0.8591\n\nEpoch 00006: val_loss improved from 0.35003 to 0.33229, saving model to ModelWeights.h5\nEpoch 7/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.3100 - accuracy: 0.8658 - val_loss: 0.3155 - val_accuracy: 0.8690\n\nEpoch 00007: val_loss improved from 0.33229 to 0.31555, saving model to ModelWeights.h5\nEpoch 8/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2960 - accuracy: 0.8764 - val_loss: 0.3087 - val_accuracy: 0.8726\n\nEpoch 00008: val_loss improved from 0.31555 to 0.30868, saving model to ModelWeights.h5\nEpoch 9/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2900 - accuracy: 0.8774 - val_loss: 0.3015 - val_accuracy: 0.8766\n\nEpoch 00009: val_loss improved from 0.30868 to 0.30154, saving model to ModelWeights.h5\nEpoch 10/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2887 - accuracy: 0.8755 - val_loss: 0.2947 - val_accuracy: 0.8790\n\nEpoch 00010: val_loss improved from 0.30154 to 0.29472, saving model to ModelWeights.h5\nEpoch 11/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2891 - accuracy: 0.8750 - val_loss: 0.2910 - val_accuracy: 0.8810\n\nEpoch 00011: val_loss improved from 0.29472 to 0.29102, saving model to ModelWeights.h5\nEpoch 12/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2671 - accuracy: 0.8915 - val_loss: 0.2890 - val_accuracy: 0.8822\n\nEpoch 00012: val_loss improved from 0.29102 to 0.28900, saving model to ModelWeights.h5\nEpoch 13/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2642 - accuracy: 0.8927 - val_loss: 0.2846 - val_accuracy: 0.8829\n\nEpoch 00013: val_loss improved from 0.28900 to 0.28458, saving model to ModelWeights.h5\nEpoch 14/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2761 - accuracy: 0.8863 - val_loss: 0.2836 - val_accuracy: 0.8854\n\nEpoch 00014: val_loss improved from 0.28458 to 0.28362, saving model to ModelWeights.h5\nEpoch 15/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2667 - accuracy: 0.8897 - val_loss: 0.2807 - val_accuracy: 0.8861\n\nEpoch 00015: val_loss improved from 0.28362 to 0.28072, saving model to ModelWeights.h5\nEpoch 16/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2574 - accuracy: 0.8918 - val_loss: 0.2790 - val_accuracy: 0.8869\n\nEpoch 00016: val_loss improved from 0.28072 to 0.27903, saving model to ModelWeights.h5\nEpoch 17/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2554 - accuracy: 0.8931 - val_loss: 0.2765 - val_accuracy: 0.8869\n\nEpoch 00017: val_loss improved from 0.27903 to 0.27648, saving model to ModelWeights.h5\nEpoch 18/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2506 - accuracy: 0.8964 - val_loss: 0.2778 - val_accuracy: 0.8888\n\nEpoch 00018: val_loss did not improve from 0.27648\nEpoch 19/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2538 - accuracy: 0.8954 - val_loss: 0.2747 - val_accuracy: 0.8883\n\nEpoch 00019: val_loss improved from 0.27648 to 0.27467, saving model to ModelWeights.h5\nEpoch 20/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2460 - accuracy: 0.8969 - val_loss: 0.2728 - val_accuracy: 0.8879\n\nEpoch 00020: val_loss improved from 0.27467 to 0.27283, saving model to ModelWeights.h5\nEpoch 21/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2609 - accuracy: 0.8897 - val_loss: 0.2711 - val_accuracy: 0.8896\n\nEpoch 00021: val_loss improved from 0.27283 to 0.27108, saving model to ModelWeights.h5\nEpoch 22/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2536 - accuracy: 0.8953 - val_loss: 0.2720 - val_accuracy: 0.8893\n\nEpoch 00022: val_loss did not improve from 0.27108\nEpoch 23/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2442 - accuracy: 0.8976 - val_loss: 0.2688 - val_accuracy: 0.8913\n\nEpoch 00023: val_loss improved from 0.27108 to 0.26883, saving model to ModelWeights.h5\nEpoch 24/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2503 - accuracy: 0.8967 - val_loss: 0.2695 - val_accuracy: 0.8910\n\nEpoch 00024: val_loss did not improve from 0.26883\nEpoch 25/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2473 - accuracy: 0.9001 - val_loss: 0.2670 - val_accuracy: 0.8915\n\nEpoch 00025: val_loss improved from 0.26883 to 0.26700, saving model to ModelWeights.h5\nEpoch 26/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2354 - accuracy: 0.9083 - val_loss: 0.2658 - val_accuracy: 0.8923\n\nEpoch 00026: val_loss improved from 0.26700 to 0.26583, saving model to ModelWeights.h5\nEpoch 27/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2443 - accuracy: 0.9006 - val_loss: 0.2652 - val_accuracy: 0.8923\n\nEpoch 00027: val_loss improved from 0.26583 to 0.26520, saving model to ModelWeights.h5\nEpoch 28/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2378 - accuracy: 0.9005 - val_loss: 0.2638 - val_accuracy: 0.8940\n\nEpoch 00028: val_loss improved from 0.26520 to 0.26376, saving model to ModelWeights.h5\nEpoch 29/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2284 - accuracy: 0.9087 - val_loss: 0.2636 - val_accuracy: 0.8928\n\nEpoch 00029: val_loss improved from 0.26376 to 0.26360, saving model to ModelWeights.h5\nEpoch 30/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2359 - accuracy: 0.9052 - val_loss: 0.2637 - val_accuracy: 0.8937\n\nEpoch 00030: val_loss did not improve from 0.26360\nEpoch 31/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2351 - accuracy: 0.9069 - val_loss: 0.2612 - val_accuracy: 0.8937\n\nEpoch 00031: val_loss improved from 0.26360 to 0.26125, saving model to ModelWeights.h5\nEpoch 32/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2327 - accuracy: 0.9061 - val_loss: 0.2607 - val_accuracy: 0.8947\n\nEpoch 00032: val_loss improved from 0.26125 to 0.26069, saving model to ModelWeights.h5\nEpoch 33/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2324 - accuracy: 0.9102 - val_loss: 0.2598 - val_accuracy: 0.8942\n\nEpoch 00033: val_loss improved from 0.26069 to 0.25977, saving model to ModelWeights.h5\nEpoch 34/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2350 - accuracy: 0.9058 - val_loss: 0.2594 - val_accuracy: 0.8960\n\nEpoch 00034: val_loss improved from 0.25977 to 0.25942, saving model to ModelWeights.h5\nEpoch 35/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2372 - accuracy: 0.9032 - val_loss: 0.2586 - val_accuracy: 0.8960\n\nEpoch 00035: val_loss improved from 0.25942 to 0.25859, saving model to ModelWeights.h5\nEpoch 36/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2334 - accuracy: 0.9048 - val_loss: 0.2573 - val_accuracy: 0.8972\n\nEpoch 00036: val_loss improved from 0.25859 to 0.25732, saving model to ModelWeights.h5\nEpoch 37/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2350 - accuracy: 0.9047 - val_loss: 0.2574 - val_accuracy: 0.8962\n\nEpoch 00037: val_loss did not improve from 0.25732\nEpoch 38/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2293 - accuracy: 0.9068 - val_loss: 0.2562 - val_accuracy: 0.8974\n\nEpoch 00038: val_loss improved from 0.25732 to 0.25622, saving model to ModelWeights.h5\nEpoch 39/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2392 - accuracy: 0.9030 - val_loss: 0.2553 - val_accuracy: 0.8984\n\nEpoch 00039: val_loss improved from 0.25622 to 0.25532, saving model to ModelWeights.h5\nEpoch 40/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2316 - accuracy: 0.9033 - val_loss: 0.2553 - val_accuracy: 0.8982\n\nEpoch 00040: val_loss did not improve from 0.25532\nEpoch 41/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2310 - accuracy: 0.9062 - val_loss: 0.2538 - val_accuracy: 0.8989\n\nEpoch 00041: val_loss improved from 0.25532 to 0.25381, saving model to ModelWeights.h5\nEpoch 42/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2278 - accuracy: 0.9119 - val_loss: 0.2535 - val_accuracy: 0.8989\n\nEpoch 00042: val_loss improved from 0.25381 to 0.25347, saving model to ModelWeights.h5\nEpoch 43/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2272 - accuracy: 0.9073 - val_loss: 0.2533 - val_accuracy: 0.8984\n\nEpoch 00043: val_loss improved from 0.25347 to 0.25327, saving model to ModelWeights.h5\nEpoch 44/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2207 - accuracy: 0.9140 - val_loss: 0.2519 - val_accuracy: 0.9009\n\nEpoch 00044: val_loss improved from 0.25327 to 0.25195, saving model to ModelWeights.h5\nEpoch 45/150\n2377/2377 [==============================] - 20s 9ms/step - loss: 0.2226 - accuracy: 0.9091 - val_loss: 0.2517 - val_accuracy: 0.8989\n\nEpoch 00045: val_loss improved from 0.25195 to 0.25169, saving model to ModelWeights.h5\nEpoch 46/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2179 - accuracy: 0.9133 - val_loss: 0.2513 - val_accuracy: 0.8989\n\nEpoch 00046: val_loss improved from 0.25169 to 0.25134, saving model to ModelWeights.h5\nEpoch 47/150\n2377/2377 [==============================] - 20s 9ms/step - loss: 0.2179 - accuracy: 0.9134 - val_loss: 0.2512 - val_accuracy: 0.8969\n\nEpoch 00047: val_loss improved from 0.25134 to 0.25117, saving model to ModelWeights.h5\nEpoch 48/150\n2377/2377 [==============================] - 20s 9ms/step - loss: 0.2250 - accuracy: 0.9098 - val_loss: 0.2502 - val_accuracy: 0.8989\n\nEpoch 00048: val_loss improved from 0.25117 to 0.25020, saving model to ModelWeights.h5\nEpoch 49/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2235 - accuracy: 0.9107 - val_loss: 0.2491 - val_accuracy: 0.9001\n\nEpoch 00049: val_loss improved from 0.25020 to 0.24913, saving model to ModelWeights.h5\nEpoch 50/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2164 - accuracy: 0.9140 - val_loss: 0.2499 - val_accuracy: 0.8972\n\nEpoch 00050: val_loss did not improve from 0.24913\nEpoch 51/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2198 - accuracy: 0.9135 - val_loss: 0.2493 - val_accuracy: 0.8979\n\nEpoch 00051: val_loss did not improve from 0.24913\nEpoch 52/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2132 - accuracy: 0.9136 - val_loss: 0.2479 - val_accuracy: 0.8989\n\nEpoch 00052: val_loss improved from 0.24913 to 0.24795, saving model to ModelWeights.h5\nEpoch 53/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2123 - accuracy: 0.9154 - val_loss: 0.2484 - val_accuracy: 0.8991\n\nEpoch 00053: val_loss did not improve from 0.24795\nEpoch 54/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2191 - accuracy: 0.9122 - val_loss: 0.2462 - val_accuracy: 0.9023\n\nEpoch 00054: val_loss improved from 0.24795 to 0.24619, saving model to ModelWeights.h5\nEpoch 55/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2127 - accuracy: 0.9184 - val_loss: 0.2457 - val_accuracy: 0.9028\n\nEpoch 00055: val_loss improved from 0.24619 to 0.24569, saving model to ModelWeights.h5\nEpoch 56/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2203 - accuracy: 0.9086 - val_loss: 0.2454 - val_accuracy: 0.9013\n\nEpoch 00056: val_loss improved from 0.24569 to 0.24539, saving model to ModelWeights.h5\nEpoch 57/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2204 - accuracy: 0.9112 - val_loss: 0.2455 - val_accuracy: 0.8999\n\nEpoch 00057: val_loss did not improve from 0.24539\nEpoch 58/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2148 - accuracy: 0.9158 - val_loss: 0.2442 - val_accuracy: 0.9026\n\nEpoch 00058: val_loss improved from 0.24539 to 0.24418, saving model to ModelWeights.h5\nEpoch 59/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2196 - accuracy: 0.9118 - val_loss: 0.2438 - val_accuracy: 0.9021\n\nEpoch 00059: val_loss improved from 0.24418 to 0.24377, saving model to ModelWeights.h5\nEpoch 60/150\n2377/2377 [==============================] - 19s 8ms/step - loss: 0.2103 - accuracy: 0.9176 - val_loss: 0.2441 - val_accuracy: 0.9006\n\nEpoch 00060: val_loss did not improve from 0.24377\nEpoch 61/150\n2377/2377 [==============================] - 20s 8ms/step - loss: 0.2192 - accuracy: 0.9165 - val_loss: 0.2451 - val_accuracy: 0.8999\n\nEpoch 00061: val_loss did not improve from 0.24377\nRestoring model weights from the end of the best epoch.\nEpoch 00061: early stopping\n\nRestoring best Weights for MobileNetV2\n","output_type":"stream"}]},{"cell_type":"code","source":"%matplotlib inline\n\ndef print_graph(item, index, history):\n    plt.figure()\n    train_values = history.history[item][0:index]\n    plt.plot(train_values)\n    test_values = history.history['val_' + item][0:index]\n    plt.plot(test_values)\n    plt.legend(['training','validation'])\n    plt.title('Training and validation '+ item)\n    plt.xlabel('epoch')\n    plt.show()\n    plot = '{}.png'.format(item)\n    plt.savefig(plot)\n\n\ndef get_best_epoch(test_loss, history):\n    for key, item in enumerate(history.history.items()):\n        (name, arr) = item\n        if name == 'val_loss':\n            for i in range(len(arr)):\n                if round(test_loss, 2) == round(arr[i], 2):\n                    return i\n                \ndef model_summary(model, history):\n    print('---'*30)\n    test_loss, test_accuracy = model.evaluate(X_test_nn, y_test, verbose=0)\n\n    if history:\n        index = get_best_epoch(test_loss, history)\n        print('Best Epochs: ', index)\n\n        train_accuracy = history.history['accuracy'][index]\n        train_loss = history.history['loss'][index]\n\n        print('Accuracy on train:',train_accuracy,'\\tLoss on train:',train_loss)\n        print('Accuracy on test:',test_accuracy,'\\tLoss on test:',test_loss)\n        print_graph('loss', index, history)\n        print_graph('accuracy', index, history)\n        print('---'*30)                ","metadata":{"execution":{"iopub.status.busy":"2021-06-28T21:41:11.914488Z","iopub.execute_input":"2021-06-28T21:41:11.914827Z","iopub.status.idle":"2021-06-28T21:41:11.933416Z","shell.execute_reply.started":"2021-06-28T21:41:11.914793Z","shell.execute_reply":"2021-06-28T21:41:11.932620Z"},"trusted":true},"execution_count":16,"outputs":[]},{"cell_type":"code","source":"model_summary(model, history)","metadata":{"execution":{"iopub.status.busy":"2021-06-28T21:41:15.265489Z","iopub.execute_input":"2021-06-28T21:41:15.265817Z","iopub.status.idle":"2021-06-28T21:41:18.543465Z","shell.execute_reply.started":"2021-06-28T21:41:15.265788Z","shell.execute_reply":"2021-06-28T21:41:18.542383Z"},"trusted":true},"execution_count":17,"outputs":[{"name":"stdout","text":"------------------------------------------------------------------------------------------\nBest Epochs:  57\nAccuracy on train: 0.9151241183280945 \tLoss on train: 0.2140893042087555\nAccuracy on test: 0.9020859003067017 \tLoss on test: 0.2437741458415985\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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oJeWlrJ+/fp4fb0xxiQkEel/h3AvS7kYY0ySsIBujDFJwgK6McYkCeuHbowZE52dnZSXl9Pe3j58YTOs9PR0iouL8fv9MX/GAroxZkyUl5eTnZ1NaWkpgz/7xMRCVampqaG8vJxZs2bF/DlLuRhjxkR7ezsFBQUWzMeAiFBQUHDCZzsW0I0xY8aC+dgZyW+ZcAF93b5a7n9pBzZkgTHGHCvhAvp7B+t5+PUPaWzrindVjDETSH19PQ8//PAJf+7SSy+lvr5+yDJ33303r7766ghrdvIkXEAvzEoDoLplsGciGGNS0WABvatr6MbfCy+8QF5e3pBl7r33Xi666KLRVO+kSLiAXpAVAKCmORznmhhjJpI777yTDz/8kEWLFrFs2TLOO+88Vq1axdy5cwH49Kc/zdKlS5k3bx6PPPJI7+dKS0uprq5m3759zJkzhy984QvMmzePT3ziE7S1tQFwyy238PTTT/eWv+eee1iyZAlnnnkmO3Y4D3Oqqqri4osvZt68edx6663MnDmT6upRPUDqhCVct8WCTKeFXtNsLXRjJqpv/Xor2w41juk2507L4Z5PzRv0/e985zts2bKFTZs28frrr3PZZZexZcuW3m5/P/nJT8jPz6etrY1ly5Zx9dVXU1Bw7HPDd+3axc9//nMeffRRrrvuOp555hk++9nPHvddhYWFbNy4kYcffpjvfve7PPbYY3zrW9/iggsu4K677uKll17ixz/+8ZjufywSroVe6LbQq1ushW6MGdzy5cuP6cP9/e9/n4ULF3L22Wdz8OBBdu3addxnZs2axaJFiwBYunQp+/btG3DbV1111XFl3nzzTW644QYAVq5cSSgUGrudiVHCtdBDmZGUi7XQjZmohmpJnyyZmZm986+//jqvvvoqb731FsFgkBUrVgzYxzstLa133uv19qZcBivn9XqHzdGfTAnXQvd7PeQF/ZZDN8YcIzs7m6ampgHfa2hoIBQKEQwG2bFjB2+//faYf/+5557L6tWrAXjllVeoq6sb8+8YTsK10AEKMgPUWC8XY0yUgoICzj33XObPn09GRgaTJ0/ufW/lypX88Ic/ZM6cOZx++umcffbZY/7999xzDzfeeCOPP/4455xzDlOmTCE7O3vMv2cocXumaFlZmY70ARfX/egtAFb/t3PGskrGmFHYvn07c+bMiXc14qajowOv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\n"},"metadata":{"needs_background":"light"}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 0 Axes>"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}},{"name":"stdout","text":"------------------------------------------------------------------------------------------\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 0 Axes>"},"metadata":{}}]},{"cell_type":"markdown","source":"## **Evaluation on test set**","metadata":{}},{"cell_type":"code","source":"# evaluate the network\nprint(\"Evaluating network...\")\npredictions = model.predict(X_test_nn)\npreds = predictions > 0.5","metadata":{"id":"RDJb2EZDtwH2","outputId":"e3685299-469c-40b1-e249-026cfcb2e4e2","execution":{"iopub.status.busy":"2021-06-28T21:41:25.755863Z","iopub.execute_input":"2021-06-28T21:41:25.756227Z","iopub.status.idle":"2021-06-28T21:41:28.541319Z","shell.execute_reply.started":"2021-06-28T21:41:25.756189Z","shell.execute_reply":"2021-06-28T21:41:28.540479Z"},"trusted":true},"execution_count":18,"outputs":[{"name":"stdout","text":"Evaluating network...\n","output_type":"stream"}]},{"cell_type":"code","source":"import seaborn as sns\nfrom sklearn import metrics\nfrom sklearn.metrics import roc_curve, roc_auc_score, plot_roc_curve, accuracy_score, classification_report, confusion_matrix\ncorr_pred = metrics.confusion_matrix(y_test, preds)\n\nn_correct = np.int((corr_pred[0][0] + corr_pred[1][1]))\nprint('> Correct Predictions:', n_correct)\nn_wrongs = np.int((corr_pred[0][1] + (corr_pred[1][0])))\nprint('> Wrong Predictions:', n_wrongs)\n\nsns.heatmap(corr_pred,annot=True, fmt=\"d\",cmap=\"Blues\")\nplt.show()\n\nprint(metrics.classification_report(y_test, preds, \n                           target_names=[\"NonViolence\", \"Violence\"]))","metadata":{"execution":{"iopub.status.busy":"2021-06-28T21:41:29.601622Z","iopub.execute_input":"2021-06-28T21:41:29.601949Z","iopub.status.idle":"2021-06-28T21:41:29.957269Z","shell.execute_reply.started":"2021-06-28T21:41:29.601912Z","shell.execute_reply":"2021-06-28T21:41:29.956236Z"},"trusted":true},"execution_count":19,"outputs":[{"name":"stdout","text":"> Correct Predictions: 3676\n> Wrong Predictions: 399\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 2 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}},{"name":"stdout","text":"              precision    recall  f1-score   support\n\n NonViolence       0.90      0.88      0.89      1874\n    Violence       0.90      0.92      0.91      2201\n\n    accuracy                           0.90      4075\n   macro avg       0.90      0.90      0.90      4075\nweighted avg       0.90      0.90      0.90      4075\n\n","output_type":"stream"}]},{"cell_type":"code","source":"# args_model = \"model.h5\"\n# model.save(args_model)","metadata":{"id":"QC4GtxqMtt81","outputId":"fe6883b6-373d-4ab3-9b9e-de6a2e0dfab1","execution":{"iopub.status.busy":"2021-06-27T12:26:57.761213Z","iopub.execute_input":"2021-06-27T12:26:57.76156Z","iopub.status.idle":"2021-06-27T12:26:58.023373Z","shell.execute_reply.started":"2021-06-27T12:26:57.761526Z","shell.execute_reply":"2021-06-27T12:26:58.02252Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### modal can learn better \n+ **note: (only 35 % of data is used in this notebook), cuz of less ram memory**","metadata":{}}]}